#pragma once
#include "VectorOperations.h"
//#include "Matrix33.h"
#include "Objects.h"
#include <string>
#include "Quaternion.h"

class Monster: public Objects
{
public:
	Monster(Monster *baseMonster, Vector3f &pos, Vector3f &vel, Vector3f &accel);
	Monster(Monster *baseMonster, Vector3f &pos);
    Monster(Monster *baseMonster);

    Monster(std::string fileName, Vector3f &pos, Vector3f &vel, Vector3f &accel);
	Monster(std::string fileName, Vector3f &pos);
	Monster(std::string fileName);
	
	int health;
	int resistance;
	
	void update();
	
	float movementIncr;
	
	Quaternion rotation;
	
private:
	int nextPoint;
	int prevPoint;
};
class Monster1 : public Monster
{
public:
	Monster1(Monster *baseMonster, Vector3f &pos, Vector3f &vel, Vector3f &accel);
	Monster1(Monster *baseMonster, Vector3f &pos, Vector3f &vel);
	Monster1(Monster *baseMonster, Vector3f &pos);
};
class Monster2 : public Monster
{
public:
	Monster2(Monster *baseMonster, Vector3f &pos, Vector3f &vel, Vector3f &accel);
	Monster2(Monster *baseMonster, Vector3f &pos, Vector3f &vel);
	Monster2(Monster *baseMonster, Vector3f &pos);
};
class Monster3 : public Monster
{
public:
	Monster3(Monster *baseMonster, Vector3f &pos, Vector3f &vel, Vector3f &accel);
	Monster3(Monster *baseMonster, Vector3f &pos, Vector3f &vel);
	Monster3(Monster *baseMonster, Vector3f &pos);
};
class Monster4 : public Monster
{
public:
	Monster4(Monster *baseMonster, Vector3f &pos, Vector3f &vel, Vector3f &accel);
	Monster4(Monster *baseMonster, Vector3f &pos, Vector3f &vel);
	Monster4(Monster *baseMonster, Vector3f &pos);
};